home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / NameRegistry.p < prev    next >
Text File  |  1996-05-01  |  28KB  |  712 lines

  1. {
  2.      File:        NameRegistry.p
  3.  
  4.      Contains:    NameRegistry Interfaces
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT NameRegistry;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __NAMEREGISTRY__}
  28. {$SETC __NAMEREGISTRY__ := 1}
  29.  
  30. {$I+}
  31. {$SETC NameRegistryIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37.  
  38. {$PUSH}
  39. {$ALIGN POWER}
  40. {$LibExport+}
  41.  
  42. {$IFC FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE }
  43. {
  44.  These definitions apply to both the System7 and System8 interfaces
  45.  RegEntryRef:    The Global Entry Reference
  46. }
  47.  
  48. TYPE
  49.     RegEntryRefPtr = ^RegEntryRef;
  50.     RegEntryRef = RECORD
  51.         contents:                ARRAY [0..3] OF UInt32;
  52.     END;
  53.  
  54.  
  55. CONST
  56.     kRegPathNameSeparator        = 58;                            {  0x3A  }
  57.  
  58.     kRegMaxPropertyNameLength    = 31;                            {  Max length of Property Name (terminator not included)  }
  59.  
  60.  
  61. TYPE
  62.     RegPropertyNameBuf                    = PACKED ARRAY [0..31] OF CHAR;
  63. {$ENDC}
  64. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  65. {
  66. ------------------------------------------------------------------------------------
  67. Name Registry Interface for System 8
  68. ------------------------------------------------------------------------------------
  69. }
  70. {
  71. ------------------------------------------------------------------------------------
  72.  Foundation Types
  73. ------------------------------------------------------------------------------------
  74. }
  75. {  Entry Name Definitions (Entry Names are C-Strings) }
  76.  
  77. CONST
  78.     kRegMaxEntryNameLength        = 47;                            {  Max length of a C-String Entry Name (terminator not included)  }
  79.  
  80. {  length of RegEntryNameBuf = kRegMaxEntryNameLength +1 }
  81.  
  82. TYPE
  83.     RegEntryNameBuf                        = PACKED ARRAY [0..47] OF CHAR;
  84. {  Create Entry Options }
  85.     RegCreateEntryOptions                = OptionBits;
  86. {  use "kNilOptions" for no options }
  87.  
  88. CONST
  89.     kRegCreateResidentEntry        = $00000001;                    {  make entry resident  }
  90.  
  91. {  Delete Entry Options }
  92.  
  93. TYPE
  94.     RegDeleteEntryOptions                = OptionBits;
  95. {  use "kNilOptions" for no options }
  96.  
  97. CONST
  98.     kRegDeleteEmbeddedEntries    = $00000001;                    {  delete embedded entries  }
  99.  
  100. {  Entry Iterator }
  101.  
  102. TYPE
  103.     RegEntryIterator = ^LONGINT;
  104. {  Entry Iterator Options }
  105.     RegEntryIteratorOptions                = OptionBits;
  106. {  use "kNilOptions" for no options }
  107.  
  108. CONST
  109.     kRegIterateEmbeddedEntries    = $00000002;                    {  iterate embedded entries  }
  110.  
  111. {
  112.  Property Instances
  113.  An instance value for a property is assigned by the Name Registry when the
  114.  instance is created.  This value is used to distinguish this instance from any
  115.  other instances of the property.  Instance values are unique and persistent for
  116.  the life of the property. Thus, clients can obtain a reference to a property (name
  117.  and instance value) and use that reference until the property is deleted or the
  118.  system is restarted.  At restart, new instance values are assigned to all
  119.  properties, including any restored persistent properties.
  120. }
  121.  
  122. TYPE
  123.     RegPropertyInstance                    = UInt32;
  124.  
  125. CONST
  126.     kRegNilPropertyInstance        = $00000000;                    {  nil property instance  }
  127.     kRegAnyPropertyInstance        = $FFFFFFFF;                    {  any property instance  }
  128.     kRegAllPropertyInstances    = $FFFFFFFE;                    {  all property instances  }
  129.  
  130. {  Create Property Options }
  131.  
  132. TYPE
  133.     RegCreatePropertyOptions            = OptionBits;
  134. {  use "kNilOptions" for no options }
  135.  
  136. CONST
  137.     kRegMultiInstanceProperty    = $00000001;                    {  multiple-instance property  }
  138.  
  139. {  Property Iterator }
  140.  
  141. TYPE
  142.     RegPropertyIterator = ^LONGINT;
  143. {  Transaction Reference }
  144.     RegTransaction = ^LONGINT;
  145. {  Nil Transaction Reference }
  146.  
  147. CONST
  148.     kRegNilTransaction            = 0;
  149.  
  150. {
  151. ------------------------------------------------------------------------------------
  152.  Name Registry Calls
  153. ------------------------------------------------------------------------------------
  154. }
  155. {
  156. ------------------------------------------------------------------------------------
  157.  EntryRef Handling
  158. ------------------------------------------------------------------------------------
  159. }
  160. {  Compare two EntryRef's for equality.  }
  161. FUNCTION RegEntryRefIsEqual({CONST}VAR ref1: RegEntryRef; {CONST}VAR ref2: RegEntryRef): BOOLEAN; C;
  162. {
  163. ------------------------------------------------------------------------------------
  164.  Adding and Deleting Entries
  165. ------------------------------------------------------------------------------------
  166. }
  167. {
  168.  Create an Entry
  169.  If (parentEntry) is NULL, the path name is assumed to be an absolute path name
  170.  rooted to the anonymous, unnamed root.  
  171.  Note, RegCreateEntry only creates a single entry, the one at the end of the path.
  172.  Thus, all parent entries along the path to the new entry (ancestors) must already
  173.  exist.
  174. }
  175. FUNCTION RegCreateEntry(transaction: RegTransaction; {CONST}VAR parentEntry: RegEntryRef; pathName: ConstCStringPtr; options: RegCreateEntryOptions; VAR newEntry: RegEntryRef): OSStatus; C;
  176. {
  177.  Delete an Entry or Subtree
  178.  RegDeleteEntry can be used to delete a single entry or a complete subtree.
  179.  To delete a subtree, set the RegDeleteEmbedded option.
  180.  All properties for deleted entries are also deleted.
  181. }
  182. FUNCTION RegDeleteEntry(transaction: RegTransaction; {CONST}VAR ref: RegEntryRef; options: RegDeleteEntryOptions): OSStatus; C;
  183. {
  184. ------------------------------------------------------------------------------------
  185.  LookUp Entry by Name
  186. ------------------------------------------------------------------------------------
  187. }
  188. {
  189.  Lookup Entry
  190.  Locates an entry given a specified subroot (searchPointRef) and path name.  If the
  191.  searchPointRef pointer is NULL, the path name is assumed to be an absolute path
  192.  name rooted to the root of the Registry.
  193. }
  194. FUNCTION RegLookupEntry(transaction: RegTransaction; {CONST}VAR searchPointRef: RegEntryRef; pathName: ConstCStringPtr; VAR foundEntry: RegEntryRef): OSStatus; C;
  195. {
  196. ------------------------------------------------------------------------------------
  197. Get Entry Name and Parent
  198. ------------------------------------------------------------------------------------
  199. }
  200. {
  201.  Retrieve the name component for the specified entry, and return the EntryRef for
  202.  the parent entry.
  203. }
  204. FUNCTION RegGetEntryName(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; VAR parentEntry: RegEntryRef; nameComponent: CStringPtr): OSStatus; C;
  205. {
  206. ------------------------------------------------------------------------------------
  207. Get Path Name
  208. ------------------------------------------------------------------------------------
  209. }
  210. {
  211.  These are utility routines to turn an Entry ID back into a name string.
  212.  Get Entry Path Size
  213.  Note, path size is returned in bytes for C-String paths
  214. }
  215. FUNCTION RegGetEntryPathSize(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; VAR pathSize: ByteCount): OSStatus; C;
  216. {  Get Path Name }
  217. FUNCTION RegGetEntryPath(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; pathName: CStringPtr; pathSize: ByteCount): OSStatus; C;
  218. {
  219. ------------------------------------------------------------------------------------
  220.  Entry Iteration
  221. ------------------------------------------------------------------------------------
  222. }
  223. {
  224.  An Entry Iterator maintains three variables that are of interest to clients.
  225.  First is an "OutermostScope" which defines the outer boundry of the iteration.
  226.  This is defined by the starting entry and includes that entry plus all of it's
  227.  embedded entries. Second is a "currentScope" which is the entry the iterator is
  228.  currently in. And third is a "currentPosition" which is the last entry returned
  229.  during an iteration.
  230.  Create Entry Iterator
  231.  Create the iterator structure. The outermostScope and currentScope of the iterator
  232.  are set to "startEntry".  If "startEntry" = NULL, the outermostScope and
  233.  currentScope are set to the root entry.  The currentPosition for the iterator is
  234.  set to "nil".
  235.  If propertyName != Null, propertyName, propertyValue, and propertySize are used
  236.  to filter the entries returned during an iteration.  If propertyName == Null, all
  237.  entries are returned.
  238. }
  239. FUNCTION RegCreateEntryIterator(transaction: RegTransaction; {CONST}VAR startEntry: RegEntryRef; options: RegEntryIteratorOptions; propertyName: ConstCStringPtr; propertyValue: UNIV Ptr; propertySize: ByteCount; VAR iterator: RegEntryIterator): OSStatus; C;
  240. {  Dispose Entry Iterator }
  241. FUNCTION RegDisposeEntryIterator(iterator: RegEntryIterator): OSStatus; C;
  242. {
  243.  Enter Child Entry
  244.  Move an Entry Iterator into the scope of a specified child entry.  The
  245.  currentScope of the iterator is set to the entry specified in "childEntry".  If
  246.  "childEntry" is nil, the currentScope is set to the entry specified by the
  247.  currentPosition of the iterator.
  248.  Note RegEnterEntry cannot be used if the "kRegIterateEmbeddedEntries" option was
  249.  set when the iterator was created. 
  250. }
  251. FUNCTION RegEnterEntry(transaction: RegTransaction; iterator: RegEntryIterator; VAR childEntry: RegEntryRef): OSStatus; C;
  252. {
  253.  Exit to Parent Entry
  254.  Move an Entry Iterator out of the current entry back into the scope of it's parent
  255.  entry. The currentPosition of the iterator is reset to the current entry (the
  256.  previous currentScope), so the next iteration call will continue where it left off.
  257.  This position is returned in parameter "currentPosition".
  258.  Note RegExitEntry cannot be used if the "kRegIterateEmbeddedEntries" option was
  259.  set when the iterator was created. 
  260. }
  261. FUNCTION RegExitEntry(transaction: RegTransaction; iterator: RegEntryIterator; VAR currentPosition: RegEntryRef): OSStatus; C;
  262. {
  263.  Iterate Entries 
  264.  Iterate and return entries contained within the entry defined by the current
  265.  scope of the iterator. If kRegIterateEmbeddedEntries option was specified when the
  266.  iterator was created, all embedded entries will be included in the iteration.  If a
  267.  property selection (name , value, and size) was specified when the iterator was
  268.  created, the only entries having a matching property are returned.  Entries are
  269.  returned one at a time. When OSStatus == nrIterationDone, all entries have been exhausted, and the
  270.  value of nextEntry will be Nil. If changed == true, one or more changes (entry
  271.  create or delete) occured since the last interation call.
  272. }
  273. FUNCTION RegIterateEntries(transaction: RegTransaction; iterator: RegEntryIterator; VAR nextEntry: RegEntryRef; VAR changed: BOOLEAN): OSStatus; C;
  274. {
  275.  Restart Entry Iteration
  276.  Restart an iteration within the current scope.  The iterator is reset such that
  277.  iteration of the contents of the currentScope entry can be restarted. The
  278.  outermostScope and currentScope of the iterator are unchanged. The currentPosition
  279.  for the iterator is set to "nil".
  280. }
  281. FUNCTION RegRestartEntryIteration(iterator: RegEntryIterator): OSStatus; C;
  282. {
  283. ------------------------------------------------------------------------------------
  284.  Adding and Deleting Properties
  285. ------------------------------------------------------------------------------------
  286. }
  287. {
  288.  Create Property
  289.  A  single instance property is created by default. To create a multiple-instance
  290.  property set the kRegMultiInstanceProperty option. The next instance of the
  291.  property will be created and the instance value will be returned in
  292.  propertyInstance.
  293. }
  294. FUNCTION RegCreateProperty(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; propertyName: ConstCStringPtr; propertyValue: UNIV Ptr; propertySize: ByteCount; options: RegCreatePropertyOptions; VAR propertyInstance: RegPropertyInstance): OSStatus; C;
  295. {
  296.  Delete Property
  297.  To delete a property the desired property instance(s) must be explicitly
  298.  identified. To delete a single instance property set propertyInstance to
  299.  kRegNilPropertyInstance.  To delete all instances of a multi-instance property, set
  300.  propertyInstance to kRegAllPropertyInstances.  Otherwise, propertyInstance must
  301.  be set to a valid instance value.
  302. }
  303. FUNCTION RegDeleteProperty(transaction: RegTransaction; {CONST}VAR EntryRef: RegEntryRef; propertyName: ConstCStringPtr; propertyInstance: RegPropertyInstance): OSStatus; C;
  304. {
  305. ------------------------------------------------------------------------------------
  306.  Get/Set Property Values
  307. ------------------------------------------------------------------------------------
  308. }
  309. {
  310.  Get/Set the value of the specified property for the specified entry.  To get, get
  311.  size, and set property values the desired property instance must be explicitly
  312.  identified.  For single instance properites propertyInstance must  be set to
  313.  kRegNilPropertyInstance.  Otherwise, propertyInstance must be set to a valid
  314.  instance value.
  315.  Get Property size
  316. }
  317. FUNCTION RegGetPropertySize(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; propertyName: ConstCStringPtr; propertyInstance: RegPropertyInstance; VAR propertySize: ByteCount): OSStatus; C;
  318. {  Get Property }
  319. FUNCTION RegGetProperty(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; propertyName: ConstCStringPtr; propertyInstance: RegPropertyInstance; propertyValue: UNIV Ptr; VAR propertySize: ByteCount): OSStatus; C;
  320. {  Set Property }
  321. FUNCTION RegSetProperty(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; propertyName: ConstCStringPtr; propertyInstance: RegPropertyInstance; propertyValue: UNIV Ptr; propertySize: ByteCount): OSStatus; C;
  322. {
  323. ------------------------------------------------------------------------------------
  324.  Iterating Properties
  325. ------------------------------------------------------------------------------------
  326. }
  327. {
  328.  Create Property Iterator
  329.  Create the property iterator structure. The target entry is defined by entryRef.
  330.  If a propertyName is specified, only property instances having the specified name
  331.  are returned. If propertyName == nil, all properties are returned.
  332. }
  333. FUNCTION RegCreatePropertyIterator(transaction: RegTransaction; {CONST}VAR entryRef: RegEntryRef; propertyName: ConstCStringPtr; VAR iterator: RegPropertyIterator): OSStatus; C;
  334. {  Dispose Property Iterator }
  335. FUNCTION RegDisposePropertyIterator(iterator: RegPropertyIterator): OSStatus; C;
  336. {
  337.  Iterate Properites
  338.  Iterate and return properties for given entry.  If a propertyName was specified
  339.  when the iterator was created, then only property instances for that name are
  340.  returned. Otherwise, all properties are returned.  The return value in
  341.  propertyInstance will be kRegNilPropertyInstance if the property is single
  342.  instance.  Else it will contain the instance value for the property. If
  343.  changed == true, one or more changes (property creates or deletes) occured since the
  344.  last iterate call.  When OSStatus == nrIterationDone, all properties have been exhausted.
  345. }
  346. FUNCTION RegIterateProperties(transaction: RegTransaction; iterator: RegPropertyIterator; foundProperty: CStringPtr; VAR propertyInstance: RegPropertyInstance; VAR changed: BOOLEAN): OSStatus; C;
  347. {
  348.  Restart Property Iteration
  349.  Used to re-iterate over a list of properties.  The Property Iterator is reset to
  350.  the beginning of the list of properties for an entry.
  351. }
  352. FUNCTION RegRestartPropertyIteration(iterator: RegPropertyIterator): OSStatus; C;
  353. {
  354. ------------------------------------------------------------------------------------
  355.  Transaction-control calls
  356. ------------------------------------------------------------------------------------
  357. }
  358. {
  359.  Begin Transaction
  360.  Marks the beginning of a sequence of Name Registry calls that compose a Registry
  361.  transaction.  An internal data structure for the transaction is created and a
  362.  reference to the transaction is returned in "tranasaction". This reference must be
  363.  used with all subsequence Name Registry calls pertaining to the transaction. The
  364.  transaction reference must be disposed using a RegCommitTransaction or
  365.  RegAbortTranscation call.    
  366. }
  367. FUNCTION RegBeginTransaction(VAR transaction: RegTransaction): OSStatus; C;
  368. {
  369.  Commit Transaction
  370.  Commits the changes made to the registry for a sepecified transaction. All changes
  371.  (entry create/delete, property create/delete, and  property value update) made for
  372.  the transaction are atomically integrated into the Registry.  If result ==
  373.  nrTransactionAborted, there was a conflict with changes from some other transaction,
  374.  and this transaction was aborted, i.e., no changes for this transaction were made.
  375.  In this case the transaction should be repeated.
  376.  Note that RegCommitTransaction always disposes the transcation reference
  377.  independant of the outcome of the transaction.  So to repeat a transaaction you
  378.  must start over with a RegBeginTransaction call.
  379. }
  380. FUNCTION RegCommitTransaction(transaction: RegTransaction): OSStatus; C;
  381. {
  382.  Abort Transaction
  383.  Aborts the changes made to the registry for a sepecified transaction. All changes
  384.  (entry create/delete, property create/delete, and  property value update) made for
  385.  the transaction are disgarded.  
  386.  RegAbortTransaction also disposes of the transcation reference.
  387. }
  388. FUNCTION RegAbortTransaction(transaction: RegTransaction): OSStatus; C;
  389. {$ENDC}
  390. {$IFC FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED }
  391. {
  392. ------------------------------------------------------------------------------------
  393.     Name Registry Interface for PowerSurge 1.0.2
  394. ------------------------------------------------------------------------------------
  395. }
  396. {
  397.  * Name Registry - API for device driver name registration
  398.  *
  399.  * This interface provides access to the namespace used
  400.  * by device drivers.  The data structures and entry points
  401.  * are specialized and simplified for device driver use.
  402. }
  403. {
  404.  //////////////////////////////////////////////////////////////////////////////
  405. //
  406. // Data Structures
  407. //
  408. }
  409. {
  410.  //////////////////////////////////////////////////////////////////////////////
  411. // 
  412. // Foundation Types
  413. //
  414. }
  415. {  Value of a property  }
  416.  
  417. TYPE
  418.     RegPropertyValue                    = Ptr;
  419. {  Length of property value  }
  420.     RegPropertyValueSize                = UInt32;
  421. {
  422.  //////////////////////////////////////////////////////////////////////////////
  423. // 
  424. // RegEntryID    :    The Global x-Namespace Entry Identifier
  425. //
  426. }
  427. {  RegEntryID:    The Global Entry ID }
  428.     RegEntryID                            = RegEntryRef;
  429.     RegEntryIDPtr                         = ^RegEntryID;
  430. {
  431.  //////////////////////////////////////////////////////////////////////////////
  432. //
  433. // Root Entry Name Definitions    (Applies to all Names in the RootNameSpace)
  434. //
  435. //    * Names are a colon-separated list of name components.  Name components
  436. //      may not themselves contain colons.  
  437. //    * Names are presented as null-terminated ASCII character strings.
  438. //    * Names follow similar parsing rules to Apple file system absolute
  439. //      and relative paths.  However the '::' parent directory syntax is
  440. //      not currently supported.
  441. }
  442. {  Max length of Entry Name  }
  443.  
  444. CONST
  445.     kRegCStrMaxEntryNameLength    = 47;
  446.  
  447. {  Entry Names are single byte ASCII  }
  448.  
  449. TYPE
  450.     RegCStrEntryName                    = CHAR;
  451.     RegCStrEntryNamePtr                    = ^CHAR;
  452. {  length of RegCStrEntryNameBuf =  kRegCStrMaxEntryNameLength+1 }
  453.     RegCStrEntryNameBuf                    = PACKED ARRAY [0..47] OF CHAR;
  454.     RegCStrPathName                        = CHAR;
  455.     RegPathNameSize                        = UInt32;
  456.  
  457. CONST
  458.     kRegEntryNameTerminator        = $00;                            {  '\0'  }
  459.     kRegPathNameTerminator        = $00;                            {  '\0'  }
  460.  
  461. {
  462.  //////////////////////////////////////////////////////////////////////////////
  463. //
  464. // Property Name and ID Definitions
  465. //    (Applies to all Properties Regardless of NameSpace)
  466. }
  467.     kRegMaximumPropertyNameLength = 31;                            {  Max length of Property Name  }
  468.     kRegPropertyNameTerminator    = $00;                            {  '\0'  }
  469.  
  470.  
  471. TYPE
  472.     RegPropertyName                        = CHAR;
  473.     RegPropertyNamePtr                    = ^CHAR;
  474. {
  475.  //////////////////////////////////////////////////////////////////////////////
  476. //
  477. // Iteration Operations
  478. //
  479. //    These specify direction when traversing the name relationships
  480. }
  481.     RegIterationOp                        = UInt32;
  482.     RegEntryIterationOp                    = RegIterationOp;
  483.  
  484. CONST
  485.                                                                 {  Absolute locations }
  486.     kRegIterRoot                = $00000002;                    {  "Upward" Relationships     }
  487.     kRegIterParents                = $00000003;                    {  include all  parent(s) of entry  }
  488.                                                                 {  "Downward" Relationships }
  489.     kRegIterChildren            = $00000004;                    {  include all children  }
  490.     kRegIterSubTrees            = $00000005;                    {  include all sub trees of entry  }
  491.     kRegIterDescendants            = $00000005;                    {  include all descendants of entry  }
  492.                                                                 {  "Horizontal" Relationships     }
  493.     kRegIterSibling                = $00000006;                    {  include all siblings  }
  494.                                                                 {  Keep doing the same thing }
  495.     kRegIterContinue            = $00000001;
  496.  
  497. {
  498.  //////////////////////////////////////////////////////////////////////////////
  499. //
  500. // Name Entry and Property Modifiers
  501. //
  502.  
  503. //
  504. // Modifiers describe special characteristics of names
  505. // and properties.  Modifiers might be supported for
  506. // some names and not others.
  507. // 
  508. // Device Drivers should not rely on functionality
  509. // specified as a modifier.
  510. }
  511.  
  512. TYPE
  513.     RegModifiers                        = UInt32;
  514.     RegEntryModifiers                    = RegModifiers;
  515.     RegPropertyModifiers                = RegModifiers;
  516.  
  517. CONST
  518.     kRegNoModifiers                = $00000000;                    {  no entry modifiers in place  }
  519.     kRegUniversalModifierMask    = $0000FFFF;                    {  mods to all entries  }
  520.     kRegNameSpaceModifierMask    = $00FF0000;                    {  mods to all entries within namespace  }
  521.     kRegModifierMask            = $FF000000;                    {  mods to just this entry  }
  522.  
  523. {  Universal Property Modifiers  }
  524.     kRegPropertyValueIsSavedToNVRAM = $00000020;                {  property is non-volatile (saved in NVRAM)  }
  525.     kRegPropertyValueIsSavedToDisk = $00000040;                    {  property is non-volatile (saved on disk)  }
  526.  
  527. {
  528.  ///////////////////////
  529. //
  530. // The Registry API
  531. //
  532. /////////////////////// 
  533. }
  534. {
  535.  ///////////////////////
  536. //
  537. // Entry Management
  538. //
  539. /////////////////////// 
  540. }
  541. {
  542. -------------------------------
  543.  * EntryID handling
  544. }
  545. {
  546.  * Initialize an EntryID to a known invalid state
  547.  *   note: invalid != uninitialized
  548. }
  549. FUNCTION RegistryEntryIDInit(VAR id: RegEntryID): OSStatus; C;
  550. {
  551.  * Compare EntryID's for equality or if invalid
  552.  *
  553.  * If a NULL value is given for either id1 or id2, the other id 
  554.  * is compared with an invalid ID.  If both are NULL, the id's 
  555.  * are consided equal (result = true). 
  556. }
  557. FUNCTION RegistryEntryIDCompare({CONST}VAR id1: RegEntryID; {CONST}VAR id2: RegEntryID): BOOLEAN; C;
  558. {
  559.  * Copy an EntryID
  560. }
  561. FUNCTION RegistryEntryIDCopy({CONST}VAR src: RegEntryID; VAR dst: RegEntryID): OSStatus; C;
  562. {
  563.  * Free an ID so it can be reused.
  564. }
  565. FUNCTION RegistryEntryIDDispose(VAR id: RegEntryID): OSStatus; C;
  566. {
  567. -------------------------------
  568.  * Adding and removing entries
  569.  *
  570.  * If (parentEntry) is NULL, the name is assumed
  571.  * to be a rooted path. It is rooted to an anonymous, unnamed root.
  572. }
  573. FUNCTION RegistryCStrEntryCreate({CONST}VAR parentEntry: RegEntryID; {CONST}VAR name: RegCStrPathName; VAR newEntry: RegEntryID): OSStatus; C;
  574. FUNCTION RegistryEntryDelete({CONST}VAR id: RegEntryID): OSStatus; C;
  575.  
  576. TYPE
  577.     RegEntryIter = ^LONGINT;
  578. {
  579.  * create/dispose the iterator structure
  580.  *   defaults to root with relationship = kRegIterDescendants
  581. }
  582. FUNCTION RegistryEntryIterateCreate(VAR cookie: RegEntryIter): OSStatus; C;
  583. FUNCTION RegistryEntryIterateDispose(VAR cookie: RegEntryIter): OSStatus; C;
  584. {
  585.  * set Entry Iterator to specified entry
  586. }
  587. FUNCTION RegistryEntryIterateSet(VAR cookie: RegEntryIter; {CONST}VAR startEntryID: RegEntryID): OSStatus; C;
  588. {
  589.  * Return each value of the iteration
  590.  *
  591.  * return entries related to the current entry
  592.  * with the specified relationship
  593. }
  594. FUNCTION RegistryEntryIterate(VAR cookie: RegEntryIter; relationship: RegEntryIterationOp; VAR foundEntry: RegEntryID; VAR done: BOOLEAN): OSStatus; C;
  595. {
  596.  * return entries with the specified property
  597.  *
  598.  * A NULL RegPropertyValue pointer will return an
  599.  * entry with the property containing any value.
  600. }
  601. FUNCTION RegistryEntrySearch(VAR cookie: RegEntryIter; relationship: RegEntryIterationOp; VAR foundEntry: RegEntryID; VAR done: BOOLEAN; {CONST}VAR propertyName: RegPropertyName; propertyValue: UNIV Ptr; propertySize: RegPropertyValueSize): OSStatus; C;
  602. {
  603. --------------------------------
  604.  * Find a name in the namespace
  605.  *
  606.  * This is the fast lookup mechanism.
  607.  * NOTE:  A reverse lookup mechanism
  608.  *      has not been provided because
  609.  *        some name services may not
  610.  *        provide a fast, general reverse
  611.  *        lookup.
  612. }
  613. FUNCTION RegistryCStrEntryLookup({CONST}VAR searchPointID: RegEntryID; {CONST}VAR pathName: RegCStrPathName; VAR foundEntry: RegEntryID): OSStatus; C;
  614. {
  615. ---------------------------------------------
  616.  * Convert an entry to a rooted name string
  617.  *
  618.  * A utility routine to turn an Entry ID
  619.  * back into a name string.
  620. }
  621. FUNCTION RegistryEntryToPathSize({CONST}VAR entryID: RegEntryID; VAR pathSize: RegPathNameSize): OSStatus; C;
  622. FUNCTION RegistryCStrEntryToPath({CONST}VAR entryID: RegEntryID; VAR pathName: RegCStrPathName; pathSize: RegPathNameSize): OSStatus; C;
  623. {
  624.  * Parse a path name.
  625.  *
  626.  * Retrieve the last component of the path, and
  627.  * return a spec for the parent.
  628. }
  629. FUNCTION RegistryCStrEntryToName({CONST}VAR entryID: RegEntryID; VAR parentEntry: RegEntryID; VAR nameComponent: RegCStrEntryName; VAR done: BOOLEAN): OSStatus; C;
  630. {
  631.  //////////////////////////////////////////////////////
  632. //
  633. // Property Management
  634. //
  635. ////////////////////////////////////////////////////// 
  636. }
  637. {
  638. -------------------------------
  639.  * Adding and removing properties
  640. }
  641. FUNCTION RegistryPropertyCreate({CONST}VAR entryID: RegEntryID; {CONST}VAR propertyName: RegPropertyName; propertyValue: UNIV Ptr; propertySize: RegPropertyValueSize): OSStatus; C;
  642. FUNCTION RegistryPropertyDelete({CONST}VAR entryID: RegEntryID; {CONST}VAR propertyName: RegPropertyName): OSStatus; C;
  643. {
  644. ---------------------------
  645.  * Traversing the Properties of a name
  646.  *
  647. }
  648.  
  649. TYPE
  650.     RegPropertyIter = ^LONGINT;
  651. FUNCTION RegistryPropertyIterateCreate({CONST}VAR entry: RegEntryID; VAR cookie: RegPropertyIter): OSStatus; C;
  652. FUNCTION RegistryPropertyIterateDispose(VAR cookie: RegPropertyIter): OSStatus; C;
  653. FUNCTION RegistryPropertyIterate(VAR cookie: RegPropertyIter; VAR foundProperty: RegPropertyName; VAR done: BOOLEAN): OSStatus; C;
  654. {
  655.  * Get the value of the specified property for the specified entry.
  656.  *
  657. }
  658. FUNCTION RegistryPropertyGetSize({CONST}VAR entryID: RegEntryID; {CONST}VAR propertyName: RegPropertyName; VAR propertySize: RegPropertyValueSize): OSStatus; C;
  659. {
  660.  * (*propertySize) is the maximum size of the value returned in the buffer
  661.  * pointed to by (propertyValue).  Upon return, (*propertySize) is the size of the
  662.  * value returned.
  663. }
  664. FUNCTION RegistryPropertyGet({CONST}VAR entryID: RegEntryID; {CONST}VAR propertyName: RegPropertyName; propertyValue: UNIV Ptr; VAR propertySize: RegPropertyValueSize): OSStatus; C;
  665. FUNCTION RegistryPropertySet({CONST}VAR entryID: RegEntryID; {CONST}VAR propertyName: RegPropertyName; propertyValue: UNIV Ptr; propertySize: RegPropertyValueSize): OSStatus; C;
  666. {
  667.  //////////////////////////////////////////////////////
  668. //
  669. // Modibute (err, I mean Modifier) Management
  670. //
  671. ////////////////////////////////////////////////////// 
  672. }
  673. {
  674.  * Modifiers describe special characteristics of names
  675.  * and properties.  Modifiers might be supported for
  676.  * some names and not others.
  677.  * 
  678.  * Device Drivers should not rely on functionality
  679.  * specified as a modifier.  These interfaces
  680.  * are for use in writing Experts.
  681. }
  682. {
  683.  * Get and Set operators for entry modifiers
  684. }
  685. FUNCTION RegistryEntryGetMod({CONST}VAR entry: RegEntryID; VAR modifiers: RegEntryModifiers): OSStatus; C;
  686. FUNCTION RegistryEntrySetMod({CONST}VAR entry: RegEntryID; modifiers: RegEntryModifiers): OSStatus; C;
  687. {
  688.  * Get and Set operators for property modifiers
  689. }
  690. FUNCTION RegistryPropertyGetMod({CONST}VAR entry: RegEntryID; {CONST}VAR name: RegPropertyName; VAR modifiers: RegPropertyModifiers): OSStatus; C;
  691. FUNCTION RegistryPropertySetMod({CONST}VAR entry: RegEntryID; {CONST}VAR name: RegPropertyName; modifiers: RegPropertyModifiers): OSStatus; C;
  692. {
  693.  * Iterator operator for entry modifier search
  694. }
  695. FUNCTION RegistryEntryMod(VAR cookie: RegEntryIter; relationship: RegEntryIterationOp; VAR foundEntry: RegEntryID; VAR done: BOOLEAN; matchingModifiers: RegEntryModifiers): OSStatus; C;
  696. {
  697.  * Iterator operator for entries with matching 
  698.  * property modifiers
  699. }
  700. FUNCTION RegistryEntryPropertyMod(VAR cookie: RegEntryIter; relationship: RegEntryIterationOp; VAR foundEntry: RegEntryID; VAR done: BOOLEAN; matchingModifiers: RegPropertyModifiers): OSStatus; C;
  701. {$ENDC}
  702. {$ALIGN RESET}
  703. {$POP}
  704.  
  705. {$SETC UsingIncludes := NameRegistryIncludes}
  706.  
  707. {$ENDC} {__NAMEREGISTRY__}
  708.  
  709. {$IFC NOT UsingIncludes}
  710.  END.
  711. {$ENDC}
  712.